package com.esunny.resourcevisualization.manage;

import com.esunny.resourcevisualization.dao.ResourceTypeEntityDao;
import com.esunny.resourcevisualization.domain.entity.ResourceTypeEntity;
import com.esunny.resourcevisualization.domain.request.PageData;
import com.esunny.resourcevisualization.domain.response.ReturnStructure;
import com.esunny.resourcevisualization.util.HostHolder;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.List;

/**
 * @version 1.0.0.0
 * @ClassName ResourceTypeEntityManage
 * @Description 资源类别实体数据处理
 * @Author baochencong
 * @Date 2020/9/28 14:46
 */
@Component
public class ResourceTypeEntityManage {

    @Resource
    private HostHolder hostHolder;

    @Resource
    private ResourceTypeEntityDao resourceTypeEntityDao;

    /**
     * 添加资源类别实体
     *
     * @param resourceTypeEntity 资源类别实体
     * @return 添加结果信息
     */
    public ReturnStructure addResourceTypeEntity(ResourceTypeEntity resourceTypeEntity) {
        resourceTypeEntity.setCreatedBy(hostHolder.getUser().getUsername());
        resourceTypeEntity.setCreatedTime(new Timestamp(System.currentTimeMillis()));
        resourceTypeEntity.setLastEditedBy(hostHolder.getUser().getUsername());
        resourceTypeEntity.setLastEditedTime(new Timestamp(System.currentTimeMillis()));
        resourceTypeEntity.setDeleted(false);
        return resourceTypeEntityDao.addResourceTypeEntity(resourceTypeEntity) ? ReturnStructure.SUCCESS("添加资源类别实体成功", resourceTypeEntity) : ReturnStructure.ERROR("添加资源类别实体失败", null);
    }

    /**
     * 根据资源类别实体id修改资源类别实体信息
     *
     * @param resourceTypeEntity 资源类别实体信息
     * @return 修改结果
     */
    public ReturnStructure updateResourceTypeEntityByEntityId(ResourceTypeEntity resourceTypeEntity) {
        return resourceTypeEntityDao.updateResourceTypeEntityByEntityId(resourceTypeEntity) ? ReturnStructure.SUCCESS("修改资源类别实体信息成功", null) : ReturnStructure.ERROR("修改资源类别实体信息失败", null);
    }

    /**
     * 根据资源类别实体id修改资源类别实体删除状态
     *
     * @param entityId 资源类别实体id
     * @return 修改结果
     */
    public ReturnStructure markDeleteResourceTypeEntityByEntityId(int entityId) {
        ResourceTypeEntity resourceTypeEntity = resourceTypeEntityDao.getResourceTypeEntityByEntityId(entityId);
        if (resourceTypeEntity == null){
            return ReturnStructure.ERROR("该资源实体不存在",null);
        }
        resourceTypeEntity.setLastEditedBy(hostHolder.getUser().getUsername());
        resourceTypeEntity.setLastEditedTime(new Timestamp(System.currentTimeMillis()));
        boolean deleted = resourceTypeEntity.isDeleted();
        resourceTypeEntity.setDeleted(!deleted);
        return resourceTypeEntityDao.updateResourceTypeEntityByEntityId(resourceTypeEntity) ? ReturnStructure.SUCCESS("修改删除状态成功", null) : ReturnStructure.ERROR("修改删除状态失败", null);
    }

    /**
     * 通过资源类别实体id获取资源类别实体
     *
     * @param entityId 资源类别实体id
     * @return 资源类别实体信息
     */
    public ResourceTypeEntity getResourceTypeEntityByEntityId(int entityId) {
        return resourceTypeEntityDao.getResourceTypeEntityByEntityId(entityId);
    }

    /**
     * 通过资源类别英文名获取资源类别实体列表
     *
     * @param name 资源类别英文名
     * @return 资源类别实体列表
     */
    public List<ResourceTypeEntity> getResourceTypeEntityListByName(String name) {
        return resourceTypeEntityDao.getResourceTypeEntityListByName(name);
    }

    /**
     * 通过资源类别英文名获取资源类别实体列表总数
     *
     * @param name 资源类别英文名
     * @return 资源类别实体列表总数
     */
    public int getResourceEntityTotalSizeByName(String name) {
        return resourceTypeEntityDao.getResourceEntityTotalSizeByName(name);
    }

    /**
     * 通过资源类别英文名获取指定页资源实体信息列表
     *
     * @param pageData 分页信息列表
     * @param name     资源类别英文名
     * @return 获取资源实体分页信息列表结果
     */
    public List<ResourceTypeEntity> getResourceEntityPageListByName(PageData<ResourceTypeEntity> pageData, String name) {
        return resourceTypeEntityDao.getResourceEntityPageListByName(pageData, name);
    }

    /**
     * 通过资源类别名和状态获取资源实体列表
     *
     * @param name   资源类别名
     * @param status 状态
     * @return 资源实体列表
     */
    public List<ResourceTypeEntity> getResourceTypeEntityListByNameAndStatus(String name, String status) {
        return resourceTypeEntityDao.getResourceTypeEntityListByNameAndStatus(name, status);
    }

    /**
     * 通过资源实体id修改资源实体状态
     *
     * @param resourceTypeEntity 实体信息
     * @return 更新结果
     */
    public ReturnStructure updateResourceTypeEntityStatusById(ResourceTypeEntity resourceTypeEntity) {
        resourceTypeEntity.setLastEditedBy(hostHolder.getUser().getUsername());
        resourceTypeEntity.setLastEditedTime(new Timestamp(System.currentTimeMillis()));
        return resourceTypeEntityDao.updateResourceTypeEntityStatusById(resourceTypeEntity) ? ReturnStructure.SUCCESS("更新状态成功", null) : ReturnStructure.ERROR("更新状态失败", null);
    }

    /**
     * 通过资源类别英文名和实体id获取资源类别实体列表
     *
     * @param entityId 实体id
     * @param name     资源类别英文名
     * @return 资源类别实体
     */
    public ResourceTypeEntity getResourceTypeEntityByEntityIdAndName(int entityId, String name) {
        return resourceTypeEntityDao.getResourceTypeEntityByEntityIdAndName(entityId, name);
    }

    /**
     * 获取资源类别实体列表
     *
     * @return 资源类比实体列表
     */
    public List<ResourceTypeEntity> getResourceTypeEntityList() {
        return resourceTypeEntityDao.getResourceTypeEntityList();
    }

    /**
     * 通过创建人英文名获取实体列表
     *
     * @param createdBy 创建人英文名
     * @return 资源实体列表
     */
    public List<ResourceTypeEntity> getResourceTypeEntityListByCreated(String createdBy) {
        return resourceTypeEntityDao.getResourceTypeEntityListByCreated(createdBy);
    }

    /**
     * 按条件获取资源类别实体列表
     *
     * @param resourceTypeEntity 查询条件
     * @return 资源类别实体列表
     */
    public List<ResourceTypeEntity> queryResourceTypeEntityList(ResourceTypeEntity resourceTypeEntity) {
        return resourceTypeEntityDao.queryResourceTypeEntityList(resourceTypeEntity);
    }

    /**
     * 通过最后一次修改人英文名获取实体列表
     *
     * @param lastEditedBy 最后一次修改人英文名
     * @return 资源实体列表
     */
    public List<ResourceTypeEntity> getResourceTypeEntityListByLastEdited(String lastEditedBy) {
        return resourceTypeEntityDao.getResourceTypeEntityListByLastEdited(lastEditedBy);
    }

    /**
     * 通过资源类别英文名和创建人英文名获取实体列表
     *
     * @param name      资源类别英文名
     * @param createdBy 创建人英文名
     * @return 资源实体列表
     */
    public List<ResourceTypeEntity> getResourceTypeEntityListByNameAndCreated(String name, String createdBy) {
        return resourceTypeEntityDao.getResourceTypeEntityListByNameAndCreated(name, createdBy);
    }

    /**
     * 通过资源类别英文名和最后一次修改人英文名获取实体列表
     *
     * @param name         资源类别英文名
     * @param lastEditedBy 最后一次修改人英文名
     * @return 资源实体列表
     */
    public List<ResourceTypeEntity> getResourceTypeEntityListByNameAndLastEdited(String name, String lastEditedBy) {
        return resourceTypeEntityDao.getResourceTypeEntityListByNameAndLastEdited(name, lastEditedBy);
    }

    /**
     * 获取可以申请的实体资源列表
     *
     * @param resourceTypeEntity 查找条件
     * @return 实体列表
     */
    public List<ResourceTypeEntity> getMayApplyEntityList(ResourceTypeEntity resourceTypeEntity) {
        return resourceTypeEntityDao.getMayApplyEntityList(resourceTypeEntity);
    }
}